package com.eliaukjq.xunlianying;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/9 - 16:30
 */
/**
 * SynchronizedObject02 类实现了 Runnable 接口，用于演示对象锁的使用。
 * 该类中的 run 方法通过 synchronized 关键字锁定一个对象，以确保在同一时间只有一个线程可以执行该段代码。
 */
public class SynchronizedObject02 implements Runnable {
    /**
     * 用于同步的锁对象，任何对 lockTarget 的同步访问都将被限制在同一时刻只有一个线程。
     */
    Object lockTarget = new Object();

    /**
     * 实现 Runnable 接口的 run 方法，包含需要同步执行的代码块。
     */
    @Override
    public void run() {
        synchronized (lockTarget) {
            // 线程开始执行，输出线程名称。
            System.out.println("线程" + Thread.currentThread().getName() + "开始");
            try {
                // 模拟线程执行耗时操作，让线程睡眠2秒。
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // 输出异常信息。
                e.printStackTrace();
            }
            // 线程执行结束，输出线程名称。
            System.out.println("线程" + Thread.currentThread().getName() + "结束");
        }
    }

    /**
     * 程序入口点。
     * 创建 SynchronizedObject02 实例并启动两个线程，这两个线程将争夺对 lockTarget 对象的锁。
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        SynchronizedObject02 instance = new SynchronizedObject02();
        Thread t1 = new Thread(instance);
        Thread t2 = new Thread(instance);
        t1.start();
        t2.start();
    }
}
